package cn.bs.busuo.front.hotel.dao.persist.repository;

import cn.bs.busuo.front.hotel.pojo.entity.*;
import cn.bs.busuo.front.hotel.pojo.param.AddNewRoomParam;
import cn.bs.busuo.front.hotel.pojo.param.DeleteHotelRoomTypeParam;
import cn.bs.busuo.front.hotel.pojo.param.DeleteHotelWorkerParam;
import cn.bs.busuo.front.hotel.pojo.param.DeleteRoomParam;
import cn.bs.busuo.front.hotel.pojo.vo.HotelRoomTypeEnabledVO;
import cn.bs.busuo.front.hotel.pojo.vo.HotelVO;
import cn.bs.busuo.front.hotel.pojo.vo.HotelWorkerVO;
import cn.bs.busuo.front.hotel.pojo.vo.HotelsRoomTypeCheckVO;

import java.util.List;

public interface HotelRepository {
    int addNew(Hotel hotel);

    int selectSightIfExist(Long sightsId);

    int setPositionAboutSight(SightsNearHotels sightsNearHotels);

    int selectCityIfExist(Long cityId);

    int setPositionAboutCity(CityHotels cityHotels);

    int addNewHotelToNotSetCity(HotelsNotSetCity hotelsNotSetCity);

    int addNewHotelToNotSetSight(HotelsNotSetSight hotelsNotSetSight);


    int deleteHotelsNotSetSight(Long hotelsId);

    int deleteHotelsNotSetCity(Long hotelId);

    int deleteById(Long hotelId);

    int updateById(Hotel hotel);

    int selectHotelNameIfSimilar(String hotelName);

    Long selectIdByHotelName(String hotelName);

    List<HotelVO> selectAll();

    HotelVO selectById(Long hotelId);

    List<HotelVO> selectHotelByCityId(Long cityId);

    int selectHotelIfEnable(Long id);

    List<HotelVO> selectHotelBySightId(Long sightId);

    List<HotelVO> selectHotelWhichNotSetCity();

    List<HotelVO> selectHotelWhichNotSetSight();

    int selectUserIfExist(Long userId);

    int selectHotelWorkerIfExist(Long HotelId, Long userId);

    int addHotelWorker(HotelWorker hotelWorker);

    int addHotelWorkerRole(UserRole userRole);

    int deleteHotelWorker(DeleteHotelWorkerParam deleteHotelWorkerParam);

    int deleteHotelWorkerRole(Long userId);

    int addNewRoomType(HotelsRoomType hotelsRoomType);

    List<HotelWorkerVO> selectHotelWorker(Long hotelId);

    int deleteRoomTypeById(DeleteHotelRoomTypeParam deleteHotelRoomTypeParam);

    List<HotelsRoomTypeCheckVO> selectRoomTypeWhichNotCheck();

    List<HotelsRoomTypeCheckVO> selectRoomTypeWhichCheck();

    int checkRoomTypeAccess(Long id,Byte checkState);

    int checkRoomTypeRefused(Long id, Byte checkState);

    List<HotelRoomTypeEnabledVO> selectHotelRoomType(Long hotelId);

    int enableRoomType(Long id);

    int disableRoomType(Long id);

    int addRoom(AddNewRoomParam addNewRoomParam);

    int deleteRoom(DeleteRoomParam deleteRoomParam);

    int selectUserIfBoss(Long userId,Long hotelId);
}
